#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <string.h>
#include <fcntl.h>

#include "lcd.h"
#include "font.h"
/**
 * @brief 创建带有文本的位图
 * @param font_size 字体大小
 * @param text 要显示的文本
 * @param text_color 文本颜色
 * @param bg_color 背景颜色
 * @param width 位图宽度
 * @param height 位图高度
 * @param x_offset 文本水平偏移量
 * @param y_offset 文本垂直偏移量
 * @return 初始化好的位图指针
 */
bitmap *initbitmap(int font_size, char *text, unsigned int text_color,
                   unsigned int bg_color, int width, int height,
                   int x_offset, int y_offset)
{
    // 1.初始化字库   注意要先将ttf文件放入开发板上
    font *f = fontLoad("simfang.ttf"); // 指定字库文件，比如simfang.ttf

    // 2.设置字体的大小
    fontSetSize(f, font_size);

    // 3.设置字体输出框的大小
    bitmap *bm;
    bm = createBitmapWithInit(width, height, 4, bg_color);

    // 4.把字体输出到输出框中
    fontPrint(f, bm, x_offset, y_offset, text, text_color, 0);
    return bm;
}
void showbitmap(bitmap *bm, int x, int y, LCDBuffer lcd_mmp)
{
    for (int i = 0; i < bm->height; i++)
    {
        for (int j = 0; j < bm->width; j++)
        {
            int index = i * bm->width + j;

            // 根据你的 getColor 宏定义，数据存储格式是：A B G R
            // 但字体库实际写入的是：0x00RRGGBB

            unsigned char byte0 = bm->map[index * 4 + 0]; // 应该是 R
            unsigned char byte1 = bm->map[index * 4 + 1]; // 应该是 G
            unsigned char byte2 = bm->map[index * 4 + 2]; // 应该是 B
            unsigned char byte3 = bm->map[index * 4 + 3]; // 应该是 0

            // 直接组合成 LCD 需要的格式：0xRRGGBB（忽略Alpha）
            lcd_mmp[i + x][j + y] = 0xFF000000 | (byte0 << 16) | (byte1 << 8) | byte2;
        }
    }
}